台嘎吼,在下小笠宏樹是也。
來到了Day 2,為了能讓大家更帶入情境,需要先讓大家理解小弟淺薄的軟體工程知識。
首先需要說明的是我是一位Android軟體工程師,因此我通常會用OOP去理解程式,當然我也有跟上最潮的Kotlin,和看過Rx系列文章,所以對於functional programing和ReactiveX大概就一知半解的程度。
接下來為了讓大家都能簡單理解OOP是什麼,接下來會為大家獻上簡單的OOP基礎知識。
在OOP中你可以說所有的東西都是由Class組成的,通常大家最喜歡舉的?是狗的例子。
class Dog() {
private val color: Int = 0XFFFFFF
fun wolf() = “ㄨㄤˋ”
fun setColor(newColor: Int) {
color = newColor
}
}
如果你需要使用這個Class那就必須創建一個起來用
val coki = Dog()
print(coki.wolf())
Console:
ㄨㄤˋ
PS: coki = 柯基
意思就是Class裡面會分成可以讓外部看得到的東西和不讓外部看到的東西,通常會用public和private表示,正常來說我們會期待一個Class只開放最少的部分給外部知道。
為了減少程式的重複性,我們會將相似的Class持有一個共同的Parent用以避免一直做重複的邏輯或是少寫得需要的條件,一樣以狗的例子繼續。
原本
class Dog() {
private val color: Int = 0XFFFFFF
fun wolf() = “ㄨㄤˋ”
fun setColor(newColor: Int) {
color = newColor
}
}
class Cat() {
private val color: Int = 0X000000
fun wolf() = “ㄇㄧㄠ”
fun setColor(newColor: Int) {
color = newColor
}
}
當我們有了這兩個Class
我們可以將其變成這樣
// Parent Class
open class Pet() {
protected open val color: Int = 0X000000
open fun wolf() = “就跟你說過放手,不要,再聽,你的藉口”
fun setColor(newColor: Int) {
color = newColor
}
}
// Child Class
class Dog(): Pet() {
override val color: Int = 0XFFFFFF
override fun wolf() = “ㄨㄤˋ”
}
// Child Class
class Cat(): Pet() {
override val color: Int = 0X000000
override fun wolf() = “ㄇㄧㄠ”
}
這個意思是你可以做出interface讓各自的Class實作所需要的行為
比如:
有一個interface是
interface CanWolf {
fun wolf() : String
}
所有用到這個CanWolf的Class都必須實作“wolf()”這個function,而其他人也可以用“CanWolf”這個概念來使用這些Class。
當我們要產生Parent Class的時候,通常的選擇會是更加抽象的或更加General的東西來當大家的Parent,畢竟Parent的角色是要能代表所有Child。
以上就是OOP的簡單解釋哩~
如果有任何疏漏還麻煩各位看官給意見了
下一篇我要來抖抖的解說一下什麼是管理學惹,希望別摔倒,也歡迎各位看官給任何意見~